library(tidyverse)
Loading tidyverse: ggplot2
Loading tidyverse: tibble
Loading tidyverse: tidyr
Loading tidyverse: readr
Loading tidyverse: purrr
Loading tidyverse: dplyr
Conflicts with tidy packages ---------------------------------
filter(): dplyr, stats
lag():    dplyr, stats

Relationship between engine size and fuel efficiency:

data = mpg
ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy))

ggplot(data) + geom_point(mapping = aes(x = hwy, y = cyl))

ggplot(data) + geom_point(mapping = aes(x = class, y = drv))

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy, color = class))

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy, size = class))

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy, alpha = class))

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy, shape = class))

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy, color = displ < 5))

Facets

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 3)

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(drv ~ cyl)

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_wrap(~ cyl)

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(. ~ displ)

ggplot(data = mpg) + geom_point(mapping = aes(x = drv, y = cyl))

Geoms

ggplot(data) + geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))

ggplot(data) + geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv, color = drv), method = loess) + geom_point(mapping = aes(x = displ, y = hwy, color = drv))

ggplot(data) + geom_smooth(mapping = aes(x = displ, y = hwy, color = drv), show.legend = F, method = loess)

ggplot(data) + geom_point(mapping = aes(x = displ, y = hwy)) + geom_smooth(mapping = aes( x = displ, y = hwy))

Bolji način za izvesti ovo gore - nema duplikacije koda!

ggplot(data, mapping = aes(x = displ, y = hwy)) + geom_point() + geom_smooth(method = loess)

ggplot(data, mapping = aes(x = displ, y = hwy)) + geom_point(mapping = aes(color = class)) + geom_smooth(data = filter(data, class == "suv"), color = "red")

ggplot(data, mapping = aes(x = displ, y = hwy, color = drv)) + geom_point() + geom_smooth(se = F)

ggplot(data, mapping = aes(x = displ, y = hwy)) + geom_point() + geom_smooth(se = F, method = loess) 

ggplot(data, mapping = aes(x = displ, y = hwy, group = drv)) + geom_point() + geom_smooth(se = F, method = loess)

ggplot(data, mapping = aes(x = displ, y = hwy, color = drv)) + geom_point() + geom_smooth(se = F, method = loess)

ggplot(data, mapping = aes(x = displ, y = hwy)) + geom_point(mapping = aes(color = drv)) + geom_smooth(se = F, method = loess)

ggplot(data, mapping = aes(x = displ, y = hwy)) + geom_point(mapping = aes(color = drv)) + geom_smooth(mapping = aes(linetype = drv), se = F, method = loess)

Statistical transformations

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut))

ggplot(data = diamonds) + stat_count(mapping = aes(x = cut))

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

ggplot(data = diamonds) + stat_summary(mapping = aes(x = cut, y = depth),
                                       fun.ymin = min,
                                       fun.ymax = max,
                                       fun.y = median)

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = ..prop..))

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = color, y = ..prop..))

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity))

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity, position = "identity", alpha = 1/5))
Ignoring unknown aesthetics: position

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "fill")

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = clarity), position = "dodge")

Jittering - adding random noise to make graphs more revealing at large scales

ggplot(data = mpg) + geom_jitter(mapping = aes(x = displ, y = hwy))

ggplot(data = mpg, mapping = aes(x = cty, y = hwy)) + geom_jitter(mapping = aes(color = "red")) + geom_count(mapping = aes(alpha = 4/5))

Box plots

ggplot(data = mpg, mapping = aes(x = factor(cyl), y = hwy)) + geom_boxplot()

Coordinate systems

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot()

ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() + coord_flip()

bar <- ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut), show.legend = F, width = 1) + theme(aspect.ratio = 1) + labs(x = NULL, y = NULL)
bar

bar + coord_flip()

bar + coord_polar()

LS0tCnRpdGxlOiAiTGVhcm5pbmcgZGF0YSB2aXN1YWxpemF0aW9uIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKCiNSZWxhdGlvbnNoaXAgYmV0d2VlbiBlbmdpbmUgc2l6ZSBhbmQgZnVlbCBlZmZpY2llbmN5OgoKYGBge3J9CmRhdGEgPSBtcGcKCmdncGxvdChkYXRhKSArIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGh3eSwgeSA9IGN5bCkpCmBgYApgYGB7cn0KZ2dwbG90KGRhdGEpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBjbGFzcywgeSA9IGRydikpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhKSArIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIGNvbG9yID0gY2xhc3MpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBzaXplID0gY2xhc3MpKQpgYGAKYGBge3J9CmdncGxvdChkYXRhKSArIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIGFscGhhID0gY2xhc3MpKQpgYGAKYGBge3J9CmdncGxvdChkYXRhKSArIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIHNoYXBlID0gY2xhc3MpKQpgYGAKYGBge3J9CmdncGxvdChkYXRhKSArIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpLCBjb2xvciA9ICJibHVlIikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSBkaXNwbCA8IDUpKQpgYGAKCiNGYWNldHMKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyBmYWNldF93cmFwKH4gY2xhc3MsIG5yb3cgPSAzKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyBmYWNldF9ncmlkKGRydiB+IGN5bCkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsgZmFjZXRfZ3JpZCguIH4gY3lsKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyBmYWNldF9ncmlkKC4gfiBkaXNwbCkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkcnYsIHkgPSBjeWwpKQpgYGAKCiMgR2VvbXMKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSksIG1ldGhvZCA9IGxvZXNzKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgbGluZXR5cGUgPSBkcnYpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgbGluZXR5cGUgPSBkcnYsIGNvbG9yID0gZHJ2KSwgbWV0aG9kID0gbG9lc3MpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSBkcnYpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSBkcnYpLCBzaG93LmxlZ2VuZCA9IEYsIG1ldGhvZCA9IGxvZXNzKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKCB4ID0gZGlzcGwsIHkgPSBod3kpKQpgYGAKCkJvbGppIG5hxI1pbiB6YSBpenZlc3RpIG92byBnb3JlIC0gbmVtYSBkdXBsaWthY2lqZSBrb2RhIQoKYGBge3J9CmdncGxvdChkYXRhLCBtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgobWV0aG9kID0gbG9lc3MpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhLCBtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKGNvbG9yID0gY2xhc3MpKSArIGdlb21fc21vb3RoKCkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoY29sb3IgPSBjbGFzcykpICsgZ2VvbV9zbW9vdGgoZGF0YSA9IGZpbHRlcihkYXRhLCBjbGFzcyA9PSAic3V2IiksIGNvbG9yID0gInJlZCIpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhLCBtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSBkcnYpKSArIGdlb21fcG9pbnQoKSArIGdlb21fc21vb3RoKHNlID0gRikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyBnZW9tX3BvaW50KCkgKyBnZW9tX3Ntb290aChzZSA9IEYsIG1ldGhvZCA9IGxvZXNzKSAKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBncm91cCA9IGRydikpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgoc2UgPSBGLCBtZXRob2QgPSBsb2VzcykKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBjb2xvciA9IGRydikpICsgZ2VvbV9wb2ludCgpICsgZ2VvbV9zbW9vdGgoc2UgPSBGLCBtZXRob2QgPSBsb2VzcykKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKyBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoY29sb3IgPSBkcnYpKSArIGdlb21fc21vb3RoKHNlID0gRiwgbWV0aG9kID0gbG9lc3MpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhLCBtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKGNvbG9yID0gZHJ2KSkgKyBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKGxpbmV0eXBlID0gZHJ2KSwgc2UgPSBGLCBtZXRob2QgPSBsb2VzcykKYGBgCgojIFN0YXRpc3RpY2FsIHRyYW5zZm9ybWF0aW9ucwoKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY3V0KSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKyBzdGF0X2NvdW50KG1hcHBpbmcgPSBhZXMoeCA9IGN1dCkpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCB5ID0gLi5wcm9wLi4sIGdyb3VwID0gMSkpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsgc3RhdF9zdW1tYXJ5KG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgeSA9IGRlcHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuLnltaW4gPSBtaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bi55bWF4ID0gbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW4ueSA9IG1lZGlhbikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKyBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQsIHkgPSAuLnByb3AuLikpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY29sb3IsIHkgPSAuLnByb3AuLikpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY2xhcml0eSkpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY2xhcml0eSwgcG9zaXRpb24gPSAiaWRlbnRpdHkiLCBhbHBoYSA9IDEvNSkpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY2xhcml0eSksIHBvc2l0aW9uID0gImZpbGwiKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IGRpYW1vbmRzKSArIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgZmlsbCA9IGNsYXJpdHkpLCBwb3NpdGlvbiA9ICJkb2RnZSIpCmBgYAoKIyBKaXR0ZXJpbmcgLSBhZGRpbmcgcmFuZG9tIG5vaXNlIHRvIG1ha2UgZ3JhcGhzIG1vcmUgcmV2ZWFsaW5nIGF0IGxhcmdlIHNjYWxlcwoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKyBnZW9tX2ppdHRlcihtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnLCBtYXBwaW5nID0gYWVzKHggPSBjdHksIHkgPSBod3kpKSArIGdlb21faml0dGVyKG1hcHBpbmcgPSBhZXMoY29sb3IgPSAicmVkIikpICsgZ2VvbV9jb3VudChtYXBwaW5nID0gYWVzKGFscGhhID0gNC81KSkKYGBgCiMgQm94IHBsb3RzCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGZhY3RvcihjeWwpLCB5ID0gaHd5KSkgKyBnZW9tX2JveHBsb3QoKQpgYGAKCiMgQ29vcmRpbmF0ZSBzeXN0ZW1zCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGNsYXNzLCB5ID0gaHd5KSkgKyBnZW9tX2JveHBsb3QoKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZywgbWFwcGluZyA9IGFlcyh4ID0gY2xhc3MsIHkgPSBod3kpKSArIGdlb21fYm94cGxvdCgpICsgY29vcmRfZmxpcCgpCmBgYAoKYGBge3J9CmJhciA8LSBnZ3Bsb3QoZGF0YSA9IGRpYW1vbmRzKSArIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgZmlsbCA9IGN1dCksIHNob3cubGVnZW5kID0gRiwgd2lkdGggPSAxKSArIHRoZW1lKGFzcGVjdC5yYXRpbyA9IDEpICsgbGFicyh4ID0gTlVMTCwgeSA9IE5VTEwpCmBgYAoKYGBge3J9CmJhcgpgYGAKCmBgYHtyfQpiYXIgKyBjb29yZF9mbGlwKCkKYGBgCgpgYGB7cn0KYmFyICsgY29vcmRfcG9sYXIoKQpgYGAKCgoK